﻿/**
 * Created by jinxs on 14-6-20.
 * ui.button.js
 */
(function ($) {
    /**
     * 缓存名称
     * @type {string}
     * @private
     */
    var _cacheName = 'uiButtonBar';

    /**
     * @class 按钮栏
     * @requires {@link uiButton}
     * @constructor uiButtonBar
     * @summary 构造函数
     * @param [options] {Object|String} 组件配置参数|要调用的组件方法名
     * @param [param] {Object} 表示要调用的组件方法的参数
     * @example
     * // 构件组件
     * $('#divBtnBar').uiButtonBar({direction: 'left'});
     * // 调用组件方法options
     * $('#divBtnBar').uiButtonBar("options");
     */
    $.fn.uiButtonBar = function (options, param) {
        if (typeof options == 'string') {
            return $.fn.uiButtonBar.methods[options](this, param);
        }
        return this.each(function(){
            var me = $(this);
            var cache = me.data(_cacheName);

            options = options || {};
            if (cache) {
                $.extend(cache.options, options);
            } else {
                me.data(_cacheName, {
                    options: $.extend({}, $.fn.uiButtonBar.defaults, me.parseUIConfig(), options)
                });
            }
            _init(me);
        });
    };

    /**
     * 方法
     * @lends uiButtonBar.prototype
     */
    $.fn.uiButtonBar.methods = {
        /**
         * @summary 获得组件的配置对象
         * @name uiButtonBar#options
         * @function
         * @returns {Object} 组件的配置对象
         */
        options: function (target) {
            return $.data(target[0], _cacheName).options;
        },
        /**
         * @summary 设置为可用
         * @function
         * @name uiButtonBar#enable
         * @returns {jQuery} 方法调用者
         */
        enable: function (target) {
            _setDisabled(target, false);
            return target;
        },
        /**
         * @summary 设置为不可用
         * @function
         * @name uiButtonBar#disable
         * @returns {jQuery} 方法调用者
         */
        disable: function (target) {
            _setDisabled(target, true);
            return target;
        }
    };

    /**
     * 默认配置
     * @lends uiButtonBar.prototype
     */
    $.fn.uiButtonBar.defaults = {
        /**
         * @type String
         * @default ""
         * @summary 背景颜色
         */
        backgroundColor: '',
        /**
         * @type Boolean
         * @default false
         * @summary 是否显示边框
         */
        buttonBorder: false,
        /**
         * @type Number
         * @default null
         * @summary 组件宽度
         */
        width: null,
        /**
         * @type Number
         * @default null
         * @summary 组件高度
         */
        height: null,
        /**
         * 可选值：left,right,center
         * @type String
         * @default "left"
         * @summary 组件对齐方式
         */
        direction: 'left',
        /**
         * @summary 是否禁用
         * @type Boolean
         * @default false
         */
        disabled: false
    };
//////--------------------------------内部方法------------------------------
    /**
     * 创建按钮
     * @param target 目标对象
     */
    var _init = function (target) {
        var options = $.data(target[0], _cacheName).options;
        var bar = $(target);
        //当按钮内没有内容时配置生效
        if (options.width) {
            bar.width(options.width);
        }
        if (options.height) {
            bar.height(options.height);
        }
        else {
            options.height = bar.height();
        }
        if (options.direction) {
            bar.css("text-align", options.direction);
        }
        bar.addClass('buttonbar');
        if (options.backgroundColor != "") {
            bar.css("background-color", options.backgroundColor);
        }
        var buttons = target.find('button');
        buttons.each(function (index, domEle) {
            var btn = $(domEle);
            var uiConfig = $.fn.parseUIConfig(btn);
            if (btn.attr("id") || uiConfig.id) {
            }
            else {
                btn.attr("id", bar.attr("id") + "_" + index);
            }
            if ($.fn.uiButton) {
                if (!options.buttonBorder) {
                    btn.css('border', 'none');
                }
                btn.uiButton(uiConfig);
            }
        });
        return target;
    };

    /**
     * 设置不可用状态
     * @param target 目标对象
     * @param disabled
     */
    var _setDisabled = function (target, disabled) {
        var options = $.data(target[0], _cacheName).options;
        var children = target.find('button');

        //不可用时
        if (disabled || target.attr('disabled') == 'disabled') {
            options.disabled = true;
            children.each(function (index, domEle) {
                var btn = $(domEle);
                btn.uiButton('disable');
                btn.addClass('button_dis');
            });
        }
        else {
            options.disabled = false;
            children.each(function (index, domEle) {
                var btn = $(domEle);
                btn.uiButton('enable');
            });
        }
    };
})(jQuery);
